package com.xiao.runner;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.xiao.domain.constants.ArticleConstants;
import com.xiao.domain.pojo.Article;
import com.xiao.service.ArticleService;
import com.xiao.utils.RedisCache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Component // 注入到容器中
public class ViewCountRunner implements CommandLineRunner {


    @Autowired
    private ArticleService articleService;
    @Autowired
    private RedisCache redisCache;

    @Override// run 方法为初始化内容; 启动时 将 数据库中 浏览量存储到 redis 中
    public void run(String... args) {
        //1. 创建查询条件 （只需要这两个字段： id viewCount）
        LambdaQueryWrapper<Article> wrapper = new LambdaQueryWrapper<>();
        wrapper.select(Article::getId,Article::getViewCount);
        // 2. 查询
        List<Article> articleList = articleService.list(wrapper);
        // 3. 转 map
        Map<String, Integer> viewCountMap = articleList.stream()
                .collect(//收集
                        Collectors.toMap( // 收集成 map
                                article ->
                                        article.getId().toString(), // 键
                                article -> {
                                    return article.getViewCount().intValue();// 值 (.longValue() 拆箱成基本类型)

                                }
                        ));
        // 4. 存储到 redis 中
        redisCache.setCacheMap(ArticleConstants.ARTICLE_VIEW_COUNT,viewCountMap);// 他把所有数据都放在这个 【article:viewCount】 map 中
    }
}